package chapter05

/**
 * 函数至简原则
 */
object Demo04_Simplify {
  def main(args: Array[String]): Unit = {
    def f0(name: String): String = {
      return name
    }
    println(f0("alice"))
    println("===============================")
    def f1(name: String): String = {
      name
    }
    println(f1("alice"))
    println("===============================")

    //函数体只有一行代码的时候可以省略花括号
    def f2(name: String): String = name
    println(f2("alice"))
    println("===============================")

    //函数类型如果能直接推断出来那么 可以省略（: 和返回值类型一起省略）
    def f3(name: String) = name
    println(f3("alice"))
    println("===============================")

    //如果有return，则不能省略返回值类型 ，必须指定
    /*def f4(name: String) =
       name

    println(f4("alice"))
    println("===============================")*/
  }

  //函数如果明确声明unit，那么即使函数体重使用return关键字也不起作用

  //Scala如果期望是无返回值类型，可以省略等号
  def f6(name: String){
    println(name)
  }
  //如果函数无参数，但是声明了参数列表，那么调用的时候，下括号可加可不加
  def f7(): Unit = {
    println("................")
  }
  f7()
  f7

  //如果函数没有参数列表，那么小括号可以省略，调用的时候小括号必须省略


  //9、如果不关心名称，只关心逻辑处理，那么函数名称（def）可以省略
  def f9(name: String): Unit = {
    println(name)
  }

  //匿名函数 （Lambda）表达式
  (name: String) => {println(name)}

}
